package com.aigua.user.service.impl;

import com.aigua.exception.IncorrectPasswordException;
import com.aigua.exception.UserNotFoundException;
import com.aigua.pojo.User;
import com.aigua.user.mapper.UserMapper;
import com.aigua.user.service.UserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * 业务逻辑层：处理事务（要不全部成功【提交】，要不全部失败【回滚】）
 * spring 默认处理事务 运行异常【回滚】
  *
 * @TODO:
 * @Author:baimu
 * @Date:2024 04 01 08 46
 **/

@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

        /**
         * 验证用户登录的函数。
         *
         * @param user 包含用户名和密码的用户对象。
         * @return 如果用户名和密码匹配，则返回该用户对象；否则抛出异常。
         * @throws UserNotFoundException 如果用户名不存在。
         * @throws IncorrectPasswordException 如果密码错误。

         */
        @Override
        public User login(User user) throws UserNotFoundException, IncorrectPasswordException{
            // 获取用户名
            String username = user.getUsername();
            // 创建查询包装器并设置用户名条件
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.lambda().eq(User::getUsername,username);

           // userQueryWrapper.eq("username",username);
            // 根据用户名查询数据库中的用户
            User user1 = this.baseMapper.selectOne(userQueryWrapper);
            // 如果查询结果为空，则抛出用户名不存在异常
            if(null==user1){
              throw  new UserNotFoundException("用户名不存在");
            }else{
                // 验证数据库中用户的密码是否与输入的密码匹配
                String passwordDb = user1.getPassword();
                if(passwordDb.equals(user.getPassword())){
                    // 如果密码匹配，则返回用户对象
                    return user1;
                }else{
                    // 如果密码不匹配，则抛出密码错误异常
                    throw new IncorrectPasswordException("密码错误");
                }
            }

        }
    }

